import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 权限控制器 / 权限控制器添加
 * @param {object} data
 * @param {number} [data.applicationId] 应用ID
 * @param {string} [data.btnIdentifying] 按钮标识
 * @param {string} [data.highlightUrl] 高亮地址
 * @param {string} [data.icon] 菜单图标
 * @param {string} [data.image] 图片ID
 * @param {boolean} [data.isBreadcrumbShow] 是否显示在面包屑中（false不显示；true显示）
 * @param {boolean} [data.isIndexShow] 是否在首页显示
 * @param {boolean} [data.isNavbarShow] 是否显示在左侧导航栏中（false不显示；true显示）
 * @param {string} [data.name] 权限名称
 * @param {number} [data.orderValue] 排序值
 * @param {string} [data.parameters] 路由参数
 * @param {number} [data.parentId] 上级ID
 * @param {string} [data.redirectUrl] 重定向地址
 * @param {string} [data.status] 菜单状态 可选值: DISABLE, ENABLE
 * @param {string} [data.type] 权限类型 可选值: BUTTON, MENU
 * @param {string} [data.url] 路由地址
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Permission页面展示实体>}
 * @author 方昊
 */
export function systemPermissionAdd(data, config) {
  return post("/system/permission/add", data, config);
}

/**
 * 权限控制器 / 权限控制器删除
 * @param {object} params
 * @param {object} data
 * @param {number} params.id 权限ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 方昊
 */
export function systemPermissionDelete(params, data, config) {
  return postWithQueryParams("/system/permission/delete", params, data, config);
}

/**
 * 权限控制器 / 权限控制器查询详情
 * @param {object} params
 * @param {number} params.id 权限ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Permission页面展示实体>}
 * @author 方昊
 */
export function systemPermissionDetail(params, config) {
  return get("/system/permission/detail", params, config);
}

/**
 * 权限控制器 / 权限控制器查询首页显示的菜单列表
 * @param {object} params
 * @param {string} [params.菜单名称] 菜单名称
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 方昊
 */
export function systemPermissionIndexList(params, config) {
  return get("/system/permission/indexList", params, config);
}

/**
 * 权限控制器 / 权限控制器分页查询
 * @param {object} data
 * @param {number} [data.applicationId] 应用ID
 * @param {number} [data.length] 分页大小
 * @param {string} [data.name] 权限名称
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.status] 菜单状态（0启用；1禁用）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<Permission页面展示实体>>}
 * @author 方昊
 */
export function systemPermissionList(data, config) {
  return post("/system/permission/list", data, config);
}

/**
 * 权限控制器 / 权限控制器查询系统菜单
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 方昊
 */
export function systemPermissionSystem(config) {
  return get("/system/permission/system", config);
}

/**
 * 权限控制器 / 权限控制器查询所有租户菜单菜单
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Permission页面展示实体>>}
 * @author 方昊
 */
export function systemPermissionTenant(config) {
  return get("/system/permission/tenant", config);
}

/**
 * 权限控制器 / 权限控制器更新
 * @param {object} data
 * @param {string} [data.btnIdentifying] 按钮标识
 * @param {string} [data.highlightUrl] 高亮地址
 * @param {string} [data.icon] 菜单图标
 * @param {number} [data.id] 主键ID
 * @param {number} [data.image] 图片ID
 * @param {boolean} [data.isBreadcrumbShow] 是否显示在面包屑中（false不显示；true显示）
 * @param {boolean} [data.isIndexShow] 是否在首页显示
 * @param {boolean} [data.isNavbarShow] 是否显示在左侧导航栏中（false不显示；true显示）
 * @param {string} [data.name] 权限名称
 * @param {number} [data.orderValue] 排序值
 * @param {string} [data.parameters] 路由参数
 * @param {number} [data.parentId] 上级ID
 * @param {string} [data.redirectUrl] 重定向地址
 * @param {string} [data.status] 菜单状态（1启用；0禁用） 可选值: DISABLE, ENABLE
 * @param {string} [data.type] 权限类型 可选值: BUTTON, MENU
 * @param {string} [data.url] 路由地址
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 方昊
 */
export function systemPermissionUpdate(data, config) {
  return post("/system/permission/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} Permission页面展示实体 页面展示实体
 * @property {number} applicationId 应用ID
 * @property {object} attachment 附件页面展示实体
 * @property {string} attachment.attKey 附件key
 * @property {number} attachment.attOrder 附件排序
 * @property {number} attachment.attSize 附件大小(单位:MB)
 * @property {string} attachment.attSizeString 附件大小
 * @property {string} attachment.attSuffix 附件后缀
 * @property {string} attachment.attUrl 附件url
 * @property {string} attachment.attachmentType 文件类型
 * @property {string} attachment.createTime 创建时间
 * @property {string} attachment.createUser 创建用户
 * @property {boolean} attachment.delFlag 删除标识(false:否, true:是)
 * @property {number} attachment.directoryId 目录id
 * @property {number} attachment.id 主键
 * @property {string} attachment.originalName 原始文件名
 * @property {string} attachment.remark 备注
 * @property {string} attachment.updateTime 修改时间
 * @property {string} attachment.updateUser 修改用户
 * @property {string} btnIdentifying 按钮标识
 * @property {string} code 权限编码
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {string} highlightUrl 高亮地址
 * @property {string} icon 菜单图标
 * @property {string} id 主键
 * @property {number} image 图片ID
 * @property {string} imageUrl 图片地址
 * @property {boolean} isBreadcrumbShow 是否显示在面包屑中（false不显示；true显示）
 * @property {boolean} isIndexShow 是否在首页显示
 * @property {boolean} isNavbarShow 是否显示在左侧导航栏中（false不显示；true显示）
 * @property {string} name 权限名称
 * @property {number} orderValue 排序值
 * @property {string} parameters 路由参数
 * @property {string} parentId 上级编码
 * @property {string} redirectUrl 重定向地址
 * @property {string} status 菜单状态 可选值: DISABLE, ENABLE
 * @property {string} type 权限类型 可选值: BUTTON, MENU
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @property {string} url 路由地址
 * @description 页面展示实体
 */
